こんにちはすべてのC++エキスパート、Win32アプリケーションがピクセルを青、赤、または緑のフルカラーに変更する場合
もう一度私です。私はその点までまっすぐに行きます。
ビットマップ画像rgb色のピクセル(青色 - 178色、緑色 - 130色、赤色131)を取得できました。
私が次にやりたいことは、ピクセルをループして、画像が完全に青くなるようにすることです。
私はいくつかのループを試しましたが、うまくいきませんので、援助が必要です!(例:Blue-255、green-0、red-
/*for (int i = 0; i < test; i++)
{
image[i].rgbtBlue;
image[i].rgbtGreen;
image[i].rgbtRed;
}*/
しかし明らかにそれはうまくいきません、それが私が援助を必要とした理由です。それを追加するために、hfileは他の目的のために初期化されていたので、関連性があるとは思わなかった。すべてのコメントをいただき、ありがとうございます。
ありがとうございました!以下はコードです。
P.S:Microsoft Visual Studio 2010 - Win32アプリケーションを使用し、コンソールを使用しないでください。
#include "stdafx.h"
#include "winmain.h"
#include "Resource.h"
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <CommDlg.h>
#include <stdint.h>
#include <string>
#include <WinGDI.h>
HANDLE hfile2;
DWORD written;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
RGBTRIPLE *image;
hfile2 = CreateFile(ofn.lpstrFile`, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_FLAG_OVERLAPPED, NULL);
//Read the header
ReadFile(hfile, &bfh, sizeof(bfh), &written, NULL);
ReadFile(hfile, &bih, sizeof(bih), &written, NULL);
// Read image
int imagesize = bih.biWidth * bih.biHeight; // Helps you allocate memory for the image
image = new RGBTRIPLE[imagesize]; // Create a new image (I'm creating an array during runtime
ReadFile(hfile, image, imagesize * sizeof(RGBTRIPLE), &written, NULL); // Reads it off the disk
get_pixel(bih.biWidth, bih.biHeight);
int test = bih.biHeight * bih.biWidth * bih.biBitCount;
RGBTRIPLE get_pixel(int x,int y)
{
// Image define from earlier
return image[(bih.biHeight-1-y)*bih.biWidth+x];
}
な '*'として機能し、二項演算子の引数の間にスペースを入れてください。それはすべての方法を読みやすくします。 –
ここで、bfh、bih、hfileなどの型宣言はありますか? hfile2は初期化しますが、hfileは初期化しませんか?試したコードはどこにありますか?試したときに何が起きましたか? – fileoffset
コードを編集し、私のコメントに追加、感謝! – Newbie