写道
Bitmap 创建
写道
我们不能总是依赖于BitmapFactory 下面告诉大家怎么从Bitmaqp中截取某一部分创建新的Bitmap
系统会有一个默认png图片:icon.png 但是这个图片中最外层会有白色的 比较讨厌 现在以此为例 说说怎么截取 因为其外层为白色 显示不出来 所以我用了 *.9.png 作为其边界
[代码 步骤]
1. 创建Bitmaop 且指向icon.png
Bitmap ori = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
2. 创建布局文件 有2个ImageView 一个供原图显示 一个供切割后显示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image1"
android:layout_gravity="center_horizontal"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image2"
android:layout_gravity="center"
/>
</LinearLayout>
3. 初始化变量
lLauout = (LinearLayout)findViewById(R.id.layout);
iv1 = (ImageView)findViewById(R.id.image1);
iv2 = (ImageView)findViewById(R.id.image2);
4. 得到原图的宽度与高度 供后面使用
width = ori.getWidth();
height = ori.getHeight();
5. 定义变量 标志切割位置 并初始化之
int startX,startY,lengthX,lengthY;
startX = 0;
startY = 0;
lengthX = width;
lengthY = height;
6. 如何选取图片位置
写道
函数原型: Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)
方法1:不断调整参数:x,y,width,heighy
方法2:利用导航键 上下左右分别控制上述4变量
导航键 左: x
导航键 右: width
导航键 上: y
导航键 下: height
使之向图片中央靠拢 且按下一下 移动固定的距离
public boolean onKeyDown(int keyCode, KeyEvent msg){
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_LEFT:
updateLeft();
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
updateRight();
break;
case KeyEvent.KEYCODE_DPAD_UP:
updateUp();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
updateDown();
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
showResult();
break;
}
return false;
}
7. 还需要判断移动是否合理
以下几种情况不合理:
1. 当图形左边 比 图形最大宽度 还大
2. 当图形上边 比 图形最大高度 还大
3. 图形宽度 或 高度 小于 0
public boolean isUpdateOK(){
if((startX > lengthX)||(startY > lengthY)||(lengthX > 0)||(lengthY > 0)){
return false;
}
else {
return true;
}
}
8. 具体移动方法:
public void updateLeft(){
startX += step;
lengthX = width-startX;
lengthY = height-startY;
if(isUpdateOK()){
target1.recycle();
target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY);
iv2.setImageBitmap(target1);
setContentView(lLauout);
}
}
public void updateUp(){
startY += step;
lengthX = width-startX;
lengthY = height-startY;
if(isUpdateOK()){
target1.recycle();
target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY);
iv2.setImageBitmap(target1);
setContentView(lLauout);
}
}
public void updateRight(){
lengthX -= step;
if(isUpdateOK()){
target1.recycle();
target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY);
iv2.setImageBitmap(target1);
setContentView(lLauout);
}
}
public void updateDown(){
lengthY -= step;
if(isUpdateOK()){
target1.recycle();
target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY);
iv2.setImageBitmap(target1);
setContentView(lLauout);
}
}
public void showResult(){
AlertDialog.Builder ab = new AlertDialog.Builder(this);
AlertDialog aDialog;
ab.setMessage("startX:"+startX+"\n"+"startY:"+startY+"\n"+"lengthX:"+lengthX+"\n"+"lengthY:"+lengthY).setTitle("show result").show();;
aDialog = ab.create();
aDialog.show();
}
9. emulator 运行情况:
分享到:
相关推荐
- **裁剪**:使用Bitmap.createBitmap()方法可以裁剪Bitmap的一部分。 - **合并**:可以将多个Bitmap拼接在一起,创建新的Bitmap。 - **颜色转换**:通过ColorFilter或者PorterDuff.Mode实现Bitmap颜色的变化。 ...
`inSampleSize`是`BitmapFactory.Options`类中的一个重要属性,它允许开发者指定在解码`Bitmap`时应使用的下采样率。通过增加`inSampleSize`的值,可以减少最终`Bitmap`的尺寸和内存占用。例如: ```java ...
Bitmap := TBitmap.Create; PNG := TPNGObject.Create; {In case something goes wrong, free booth Bitmap and PNG} try Bitmap.LoadFromFile(Source); PNG.Assign(Bitmap); //Convert data into png PNG....
- **裁剪**:`createBitmap()`配合`Canvas.drawBitmap()`可以实现裁剪效果。 - **缩放**:`Bitmap.createScaledBitmap()`用于缩放Bitmap。 - **旋转**:可以使用Matrix的`postRotate()`方法旋转Bitmap。 - **...
切割图片通常指的是从原始图片中提取出一个矩形区域,这个操作在Android中可以通过Bitmap.createBitmap方法实现。以下是一个简单的示例,展示如何从Bitmap中裁剪出指定大小和位置的子Bitmap: ```java // 原始...
Fullscreen:=TBitmap.Create;//创建一个BITMAP来存放图象 Fullscreen.Width:=screen.width; Fullscreen.Height:=screen.Height; DC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕 FullscreenCanvas:=TCanvas...
2. **字节数组到WPF的BitmapSource**:接着,使用`System.Windows.Media.Imaging.BitmapFrame.Create`静态方法从字节数组创建`BitmapSource`。这个方法接受字节数组和一些元数据,如编码、宽度、高度等。 ```csharp...
通过`Bitmap.Config.ARGB_8888.config`和`Bitmap.createBitmap()`创建的Bitmap可以放入池中。 6. **避免在主线程中处理Bitmap**:加载、解码和操作Bitmap应在子线程中进行,以防止阻塞UI线程导致应用无响应。 7. *...
- 使用Bitmap.createBitmap()动态创建Bitmap时,要考虑内存预算,避免内存溢出。 - 使用完Bitmap后,调用recycle()方法回收内存,但需要注意,一旦回收,不能再使用。 - 使用软引用(SoftReference)或弱引用...
本篇文章将深入探讨`CreateBitmap`函数的使用,并通过三个实际示例来演示其用法。 `CreateBitmap`函数的基本语法如下: ```cpp HBITMAP CreateBitmap( int nWidth, int nHeight, UINT cPlanes, UINT ...
//创建一个BITMAP来存放图象 Fullscreen.Width:=screen.width; Fullscreen.Height:=screen.Height; DC:=GetDC(0); //取得屏幕的DC,参数0指的是屏幕 FullscreenCanvas:=TCanvas.Create; //创建一个CANVAS对象 ...
- **裁剪**:使用`Bitmap.createBitmap(Bitmap source, int left, int top, int width, int height)`可以从源Bitmap中裁剪出新的Bitmap。 - **调整颜色**:可以使用`ColorMatrix`和`ColorFilter`对Bitmap的颜色...
Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); ...
Bitmap := TGdiPlusBitmap.Create; try if not Bitmap.LoadFromMemory(PNGData, PNGSize) then raise Exception.Create('Failed to load PNG'); Result := TBitmap.Create; Result.HandleType := bmDIB; ...
当我们需要对Bitmap应用Matrix变换时,可以使用Bitmap.createBitmap方法,它接受原始Bitmap、新的宽度和高度以及Matrix作为参数。Matrix会根据给定的变换规则对图像进行处理,生成一个新的Bitmap。例如,以下代码...
2. **复制屏幕到Bitmap**:使用`BitBlt`函数从设备上下文(DC,Device Context)复制屏幕内容到Bitmap。设备上下文是GDI用来表示图形设备的抽象,可以通过`GetDC`函数获取屏幕的设备上下文。 ```delphi var ...
创建`HBITMAP`通常通过调用`CreateBitmap`、`CreateDIBitmap`或`CreateCompatibleBitmap`函数完成,这些函数允许我们创建不同类型的位图。 在“Bitmap保存为文件”这个示例工程中,核心任务是将`HBITMAP`对象的内容...
Image1, Image2: TImage; Bitmap1, Bitmap2, CombinedBitmap: TGDIPlusBitmap; Graphics: TGDIPlusGraphics; BlendFactor: Single; begin // 初始化两张图片组件 Image1 := TImage.Create(nil); Image2 := ...
- IMPROVED: Change the way of registering bitmap font. - FIXED: A GButton pivot issue. - FIXED: Correct text align behavior. 2.3.0 - NEW: Allow loader to load component. - NEW: Add text template ...
2. **创建OBJ_BITMAP对象**:使用`ObjectCreate()`函数创建OBJ_BITMAP对象,需要指定对象的名称、起始和结束坐标以及位图文件的句柄。对象的位置应该根据图表的大小进行调整,以确保图像正确显示。 3. **设置对象...