
Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbAlpha As Byte '透明通道
End Type
Private Type BITMAPINFOHEADER
biSize As Long '位图大小
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer '信息头长度
biCompression As Long '压缩方式
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDCDest As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hDCSrc As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Command1_Click()
Dim hDCMemory As Long, hBmp As Long, hBmpPrev As Long, r As Long, hDCSrc As Long, hPal As Long, hPalPrev As Long
Dim LeftSrc As Long, TopSrc As Long, WidthSrc As Long, HeightSrc As Long, bytDataOut() As Byte, lngOut() As Long
Dim BitInfo As BITMAPINFO
Dim i As Long, j As Long
'修改下面4个参数就可以调整画面范围
LeftSrc = 0
TopSrc = 0
WidthSrc = 1024
HeightSrc = 768
hDCSrc = GetWindowDC(0) '(hWndSrc)
hDCMemory = CreateCompatibleDC(hDCSrc)
hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
hBmpPrev = SelectObject(hDCMemory, hBmp)
r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)
ReDim bytDataOut(2, WidthSrc - 1, HeightSrc - 1)
ReDim lngOut(WidthSrc - 1, HeightSrc - 1)
With BitInfobmiHeader
biBitCount = 24
biCompression = 0
biPlanes = 1
biSize = Len(BitInfobmiHeader)
biWidth = WidthSrc
biHeight = -HeightSrc
End With
GetDIBits hDCMemory, hBmp, 0, HeightSrc, bytDataOut(0, 0, 0), BitInfo, 0
hBmp = SelectObject(hDCMemory, hBmpPrev)
r = DeleteDC(hDCMemory)
r = ReleaseDC(hWndSrc, hDCSrc)
DeleteObject hBmp
For i = LeftSrc To WidthSrc - 1
For j = TopSrc To HeightSrc - 1
lngOut(i, j) = RGB(bytDataOut(0, i, j), bytDataOut(1, i, j), bytDataOut(2, i, j))
Next
Next
MsgBox "数据已存放在lngOut数组里面" & lngOut(5, 5)
End Sub
修改了下,这次没问题啦
b假如是原来的图像
Bitmap bmpOut = new Bitmap(sWidth, sHeight, PixelFormatFormat24bppRgb);
Graphics g = GraphicsFromImage(bmpOut);
gDrawImage(b, new Rectangle(0, 0, bWidth, bHeight), new Rectangle(pX, pY,sWidth, sHeight), GraphicsUnitPixel);
gDispose();
或者这样吧
Rectangle rg=new Rectangle(pX, pY,sWidth, sHeight);
g=GraphicsFromImage(bm1);
gDrawImage(b,rg);
return bmpOut;
您好,很高兴为您解答:
//根据坐标获取
ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageViewgetDrawable())getBitmap();
int pixel = bitmapgetPixel(x,y);
//获取颜色
int redValue = Colorred(pixel);
int blueValue = Colorblue(pixel);
int greenValue = Colorgreen(pixel);
转载,仅供参考,如果我的回答没帮助到您,请继续追问。
嗯 ~~是这样的,。
1:你知道每个像素的坐标和灰度,那就知道图像的大小,定义一个固定的二维数组,把所有像素存入其中。
color ColorBuffer[WIDTH][HEIGHT] = {0};
ColorBuffer[i][j]b = ColorBuffer[i][j]g = ColorBuffer[i][j]r = colorzhi1//当前像素值,如果RGB一样。如果不一样则单独赋值;
2: 然后SaveBmp((LPSTR)(LPCTSTR)bmpname, WIDTH,HEIGHT, (unsigned char)ColorBuffer);
把ColorBuffer中的值转化成BMP
//bmpnameFormat("E:\\8位图像%dbmp",1);
3:保存还是直接显示就看你自己了
参考SaveBmp函数: 这是vc9下的,UNC字符集的。
void CSeekerDataDlg::SaveBmp(char filename,int height,int width,unsigned char data)
// 函数名 文件名指针 文件高度 文件宽度 文件数据指针
{
unsigned int size = width height 3 + 54;
struct BMPPIC
{
BITMAPFILEHEADER bitmapfileheader;
BITMAPINFOHEADER bitmapinfoheader;
}bitmap;
//写bmp文件信息头
bitmapbitmapinfoheaderbiSize = sizeof(BITMAPINFOHEADER);
bitmapbitmapinfoheaderbiWidth = width;
bitmapbitmapinfoheaderbiHeight = height;
bitmapbitmapinfoheaderbiPlanes = 1;
bitmapbitmapinfoheaderbiBitCount = 24; //24位
bitmapbitmapinfoheaderbiCompression = 0;
bitmapbitmapinfoheaderbiSizeImage = widthwidth3;
bitmapbitmapinfoheaderbiXPelsPerMeter = 0;
bitmapbitmapinfoheaderbiYPelsPerMeter = 0;
bitmapbitmapinfoheaderbiClrUsed = 256;
bitmapbitmapinfoheaderbiClrImportant = 256;
//写文件头
bitmapbitmapfileheaderbfType = 0x4D42; // 位图文件的类型,必须为BM
bitmapbitmapfileheaderbfSize = (DWORD)sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ heightwidth3; //位图文件的大小,以字节为单位
bitmapbitmapfileheaderbfReserved1 = 0; // 位图文件保留字,必须为0
bitmapbitmapfileheaderbfReserved2 = 0; // 位图文件保留字,必须为0
bitmapbitmapfileheaderbfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); // 位图数据的起始位置,以相对于位图 // 文件头的偏移量表示,以字节为单位
int totaldLine=height;
int totalArray=width;
int lpitch=bitmapbitmapinfoheaderbiSizeImage/bitmapbitmapinfoheaderbiHeight;
int ipitch=bitmapbitmapinfoheaderbiWidth(bitmapbitmapinfoheaderbiBitCount/8);
//bitmapbuffer=(UCHAR)malloc(bitmapbitmapinfoheaderbiSizeImage);
//HANDLE fh;
// fh = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
FILE fp = fopen(filename, "wb");
if (!fp) return;
fwrite((LPSTR)&bitmapbitmapfileheader, 1, sizeof(bitmapbitmapfileheader), fp);
fwrite((LPSTR)&bitmapbitmapinfoheader, 1,sizeof(bitmapbitmapinfoheader),fp);
fwrite(data, 1, size,fp); fclose(fp);
}
procedure TForm1Button2Click(Sender: TObject);
var
range:TBDColorRange;
Bit1,Bit2 : TBDBitmapData;
Left,Top : Integer;
b : Boolean;
target:String;
begin
Bit1:=TBDBitmapDataCreate; Bit2:=TBDBitmapDataCreate;
ranger:=5; rangeG:=5; rangeB:=5;
target:='1bmp';
if not Bit2LoadFromFile(target) then
begin
Bit1Free; Bit2Free; exit;
end;
Bit1CopyFormScreen();
b:=Bit1FindImage(Bit2,range,Left,Top);
if b then
begin
SetCursorPos(Left+20,Top+5) // 移到找到的图的坐标
end
else
Bit1Free;
Bit2Free;
end;
以上就是关于VB如何快速获取屏幕所有坐标的颜色值,是全部每一个点,保存在二维数组里面。全部的内容,包括:VB如何快速获取屏幕所有坐标的颜色值,是全部每一个点,保存在二维数组里面。、C# 已知坐标Point p,和Size s,怎样将这个范围内的图像变成Bitmap类型的数据呀、如何获取android界面某一个坐标点的颜色值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)